package com.xadrez.view;

import com.xadrez.modelo.Peca;
import com.xadrez.modelo.Posicao;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TabuleiroView extends JPanel {

    private Dimension quadrados;
    private List<PecaView> pecas;
    private static TabuleiroView instance = null;
    private Color cor;
    public final int TAMANHOTABULEIRO = 600;
    public final int TAMANHOQUADRADO = TAMANHOTABULEIRO / 8;

    public synchronized static TabuleiroView getInstance() {
        if (instance == null) {
            instance = new TabuleiroView();
        }
        return instance;
    }

    private TabuleiroView() {
        setLayout(new GridLayout(8, 8));

        quadrados = new Dimension(TAMANHOTABULEIRO, TAMANHOTABULEIRO);
        setPreferredSize(quadrados);
        setBounds(0, 0, quadrados.width, quadrados.height);
        pecas = new ArrayList<PecaView>();
    }

    public PecaView buscaPeca(int x, int y) {
        Component c = TabuleiroView.getInstance().findComponentAt(x, y);
        PecaView peca = null;

        if (c instanceof JLabel) {
            JLabel imagem = (JLabel) c;

            boolean achou = false;
            int i = 0;
            while (!achou && i < pecas.size()) {
                if (pecas.get(i).getImagem() == imagem) {
                    peca = pecas.get(i);
                    achou = true;
                }
                i++;
            }
        }
        return peca;
    }

    public void promover(Peca peca){
        Posicao pView = getPosicaoNaView(peca.getPosicaoNoTabuleiro());
//        PecaView p = buscaPeca(pView.getX(),pView.getY());
        PecaView p = new PecaView();
        p.setPeca(peca);
        String corPeca = "preto";
        if(peca.getJogador().getId()==1)
            corPeca = "branco";
        p.setImagem(new JLabel(new ImageIcon("./src/main/java/com/xadrez/view/grafico/" + corPeca + "_" + peca + ".gif")));
        
        Container parent = TabuleiroView.getInstance().findComponentAt(pView.getX(),pView.getY()).getParent();
        TabuleiroView.getInstance().getPecas().remove(buscaPeca(pView.getX(),pView.getY()));
        TabuleiroView.getInstance().getPecas().add(p);
        parent.remove(0);
//        parent.add(p.getImagem());
        MovimentoView.move(p, TabuleiroView.getInstance().findComponentAt(pView.getX(),pView.getY()));
    }
    
    public void inverte(Posicao pos) {
        int z = pos.getX();
        pos.setX(pos.getY());
        pos.setY(z);
    }
    
    //Traduz uma posicao real em uma posicao da view
    public Posicao getPosicaoNaView(Posicao posicao){
        Posicao temp = new Posicao(posicao.getX()*TAMANHOQUADRADO, posicao.getY()*TAMANHOQUADRADO);
        inverte(temp);
        return temp;
    }
    
    public Posicao getPosicaoReal(Posicao posicao){
        Posicao temp = new Posicao(posicao.getX()/TAMANHOQUADRADO, posicao.getY()/TAMANHOQUADRADO);
        inverte(temp);
        return temp;
    }

    public Dimension getQuadrados() {
        return quadrados;
    }

    public void setQuadrados(Dimension quadrados) {
        this.quadrados = quadrados;
    }

    public Color getCor() {
        return cor;
    }

    public void setCor(Color cor) {
        this.cor = cor;
    }

    public List<PecaView> getPecas() {
        return pecas;
    }

    public void setPecas(List<PecaView> pecas) {
        this.pecas = pecas;
    }
}
